package com.binhthuan.catechist.server.domain;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.google.gson.annotations.Expose;

/**
 * @author Giang Đinh - Điểm danh học viên, tương ứng với bảng <b>ec_attendance_detail</b>
 *         trong cơ sở dữ liệu.
 */
@Entity
@Table(name="ec_attendance_detail")
public class AttendanceDetail extends AbstractObject {
    
    /**
     * Mã điểm danh.
     */
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    @Expose
    private Integer id;
    
    /**
     * Học viên.
     */
    @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
    @JoinColumn(name="trainee_id")
    @Expose
    private Trainee trainee;
    
    /**
     * Tình trạng điểm danh.
     */
    @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name="attendance_status_id")
    @Expose
    private AttendanceStatus status;
    
    /**
     * Sổ điểm danh.
     */
    @ManyToOne(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
    @JoinColumn(name="attendance_list_id")
    @Expose
    private AttendanceList attendanceList;
    
    /**
     * Ghi chú.
     */
    @Column(name="comment", length=255)
    @Expose
    private String comment;

    public AttendanceDetail() {
        
    }
    
    /**
     * Lấy mã điểm danh.
     * @return Mã điểm danh.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã điểm danh.
     * @param id
     *            Mã điểm danh.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy học viên.
     * @return Học viên.
     */
    public Trainee getTrainee() {
        return trainee;
    }

    /**
     * Gán học viên.
     * @param trainee
     *            Học viên.
     */
    public void setTrainee(Trainee trainee) {
        this.trainee = trainee;
    }

    /**
     * Lấy trạng thái điểm danh.
     * @return Trạng thái điểm danh.
     */
    public AttendanceStatus getStatus() {
        return status;
    }

    /**
     * Gán trạng thái điểm danh.
     * @param status
     *            Trạng thái điểm danh.
     */
    public void setStatus(AttendanceStatus status) {
        this.status = status;
    }

    /**
     * Lấy sổ điểm danh.
     * @return Sổ điểm danh.
     */
    public AttendanceList getAttendanceList() {
        return attendanceList;
    }

    /**
     * Gán sổ điểm danh.
     * @param attendanceList
     *            Sổ điểm danh.
     */
    public void setAttendanceList(AttendanceList attendanceList) {
        this.attendanceList = attendanceList;
    }

    /**
     * Lấy ghi chú.
     * @return Ghi chú.
     */
    public String getComment() {
        return comment;
    }

    /**
     * Gán ghi chú.
     * @param comment
     *            Ghi chú.
     */
    public void setComment(String comment) {
        this.comment = comment;
    }
}
